//
// IOperand.hpp for  in /home/lund/Projets/abstract-vm
// 
// Made by florian dewulf
// Login   <dewulf_f@epitech.net>
// 
// Started on  Mon Feb  4 10:54:19 2013 florian dewulf
// Last update Tue Feb 19 19:38:28 2013 kevin lansel
//

#ifndef		_IOPERAND_HPP_
#define		_IOPERAND_HPP_

enum	eOperandType {
  INT8,
  INT16,
  INT32,
  FLOAT,
  DOUBLE
};

 class IOperand
 {
 public:
   virtual std::string const &toString() const = 0; // Renvoie une string reprensentant l’instance
   virtual int getPrecision() const = 0; // Renvoie la precision du type de l’instance
   virtual eOperandType getType() const = 0; // Renvoie le type de l’instance. Voir plus bas
   virtual IOperand *operator+(const IOperand &rhs) const = 0; // Somme
   virtual IOperand *operator-(const IOperand &rhs) const = 0; // Difference
   virtual IOperand *operator*(const IOperand &rhs) const = 0; // Produit
   virtual IOperand *operator/(const IOperand &rhs) const = 0; // Quotient
   virtual IOperand *operator%(const IOperand &rhs) const = 0; // Modulo
   virtual ~IOperand() {}
 };


#endif
